/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2014-2015 Umeng, Inc
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

package com.umeng.comm.ui.adapters;

import android.content.Context;
import android.graphics.Bitmap;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView.LayoutParams;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;

import com.qianxx.base.utils.LogUtil;
import com.qianxx.base.utils.ScreenUtil;
import com.umeng.comm.core.beans.ImageItem;
import com.umeng.comm.core.imageloader.ImgDisplayOption;
import com.umeng.comm.core.imageloader.UMImageLoader;
import com.umeng.comm.core.sdkmanager.ImageLoaderManager;
import com.umeng.comm.core.utils.ResFinder;
import com.umeng.comm.core.utils.ResFinder.ResType;
import com.umeng.comm.ui.adapters.viewholders.NullViewParser;
import com.umeng.comm.ui.imagepicker.adapters.CommonAdapter;
import com.umeng.comm.ui.imagepicker.widgets.SquareImageView;
import com.umeng.comm.ui.widgets.HomeImageView;

/**
 * 消息流九宫格图片的Adapter
 */
public class FeedImageAdapter extends CommonAdapter<ImageItem, NullViewParser> {

    private ImgDisplayOption mDisplayOption = new ImgDisplayOption();
    UMImageLoader mImageLoader;
    int defaultWidth;
    int defaultHeight;

    /**
     * 构造函数
     *
     * @param context
     */
    public FeedImageAdapter(Context context) {
        super(context);
        initDisplayOption();
        mImageLoader = ImageLoaderManager.getInstance().getCurrentSDK();
        // 图片的默认宽度
        defaultWidth = ScreenUtil.getScreenWitdh(context) - ScreenUtil.dip2px(30, context);
        defaultHeight = defaultWidth / 2;
        LogUtil.d("\n-----------------");
        LogUtil.d("defaultWidth = " + defaultWidth + " || defaultHeight = " + defaultHeight);
        LogUtil.d("-----------------\n");
    }

    @Override
    protected NullViewParser createViewHolder() {
        return new NullViewParser();
    }

    /**
     * 初始化显示的图片跟配置</br>
     */
    private void initDisplayOption() {
        mDisplayOption.mLoadingResId = ResFinder.getResourceId(ResType.DRAWABLE,
                "icon_pic_zhanwei");
        mDisplayOption.mLoadFailedResId = ResFinder.getResourceId(ResType.DRAWABLE,
                "icon_pic_zhanwei");
    }

    @Override
    public int getCount() {
        int count = super.getCount();
//        //让其只显示一张图片
//        LogUtil.d("isHome = " + isHome);
        if (isHome && count > 1) {
            return 1;
        }
        return count > 9 ? 9 : count;
    }

    // 此处不用ViewParser的方式，主要是只有ImageView且都需要设置Tag（ViewHolder跟图片的url地址，导致冲突）
    @Override
    public View getView(int position, View view, ViewGroup parent) {
        if (isHome) { // 首页
            return setHomeDisplay(position, view, parent);
        }
        // 非首页
        SquareImageView imageView;
        if (view == null) {
            LayoutParams mImageViewLayoutParams = new LayoutParams(LayoutParams.MATCH_PARENT
                    , ViewGroup.LayoutParams.MATCH_PARENT);
            imageView = new SquareImageView(mContext);
            imageView.setScaleType(ScaleType.CENTER_CROP);
            imageView.setLayoutParams(mImageViewLayoutParams);
        } else {
            imageView = (SquareImageView) view;
        }
        imageView.setImageUrl(getItem(position).thumbnail, mDisplayOption);
        return imageView;

    }

    @Override
    protected void setItemData(int position, NullViewParser holder, View rootView) {
    }

    // 设置首页，作品显示
    private View setHomeDisplay(int position, View view, ViewGroup parent) {
        HomeImageView imageView;
        if (view == null) {
            LayoutParams mImageViewLayoutParams = new LayoutParams(LayoutParams.MATCH_PARENT
                    , ViewGroup.LayoutParams.WRAP_CONTENT);
            imageView = new HomeImageView(mContext);
            imageView.setLayoutParams(mImageViewLayoutParams);
        } else {
            imageView = (HomeImageView) view;
        }
        displayImage(imageView, getItem(position), false); // 显示中等质量的图片
        return imageView;
    }

    /**
     * 加载图片,默认加载的是ImageItem中的中等质量的图片,当originImage参数为true时则加载原图.
     *
     * @param imageView   显示图片的ImageView
     * @param image       图片的ImageItem
     * @param originImage 是否加载原图
     */
    private void displayImage(ImageView imageView, final ImageItem image, boolean originImage) {
        String imageUrl = originImage ? image.originImageUrl : image.middleImageUrl;
        ImgDisplayOption option = ImgDisplayOption.getCommonDisplayOption(); // 使用默认Option即可，会根据图片大小适当压缩
        option.mLoadingResId = comm.umeng.com.umeng_community_library_project.R.drawable.icon_pic_big;
        option.mLoadFailedResId = comm.umeng.com.umeng_community_library_project.R.drawable.icon_pic_big;
        mImageLoader.displayImage(imageUrl, imageView, option,
                new UMImageLoader.ImageLoadingListener() {

                    @Override
                    public void onLoadingStarted(String imageUri, View view) {
                    }

                    @Override
                    public void onLoadingFailed(String imageUri, View view) {

                    }

                    @Override
                    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                        if (view == null) {
                            return;
                        }
                        HomeImageView imageView = (HomeImageView) view;
                        if (isUriEqualsWithImageViewTag(imageView.getTag(), imageUri)
                                && loadedImage != null) {
                            imageView.setImageBitmap(loadedImage);
                            float scale = (float) defaultWidth / (float) loadedImage.getWidth();
                            int height = (int) (loadedImage.getHeight() * scale);
                            ViewGroup.LayoutParams params = imageView.getLayoutParams();
                            params.width = defaultWidth;
                            params.height = height;
                            imageView.setLayoutParams(params);
                            imageView.updateScale(scale);
                        }
                    }
                });
    }

//    /**
//     * 根据image设置宽高。如果是wrap_content,match_parent则返回宽高250</br>
//     *
//     * @param imageView
//     * @return
//     */
//    private Point getSize(ImageView imageView) {
//        Point size = new Point();
//        if (imageView.getWidth() > 0) {
//            size.x = imageView.getWidth();
//            size.y = imageView.getHeight();
//        } else {
//            size.x = defaultWidth / 4;
//            size.y = defaultHeight / 4;
//        }
//        return size;
//    }

    private boolean isUriEqualsWithImageViewTag(Object tag, String url) {
        return tag != null && !TextUtils.isEmpty(url) && tag.equals(url);
    }

}
